﻿#ifndef COMMON_H
#define COMMON_H


#include <QVariant>
#include <QList>


//发送的标志位
//目前只有Server发送的是加密的,Client解密
#define TRANSMIT_SOCKET_ID      ((quint8)0x80)   //发送SocketID
#define TRANSMIT_CODE_REQUEST   ((quint8)0x8b)   //请求Code
#define TRANSMIT_CODE_RECIEVED  ((quint8)0x8c)   //收到Code
#define TRANSMIT_CODE_DATA      ((quint8)0x8d)   //收到Code加密的数据

#define TRANSMIT_CLIENT_TYPE    ((quint8)0x81)      //发送Client类型
#define TRANSMIT_GROUP_TYPE     ((quint8)0x82)      //发送Group类型
#define TRANSMIT_DATA_TYPE      ((quint8)0x83)      //发送Data类型
#define TRANSMIT_GAME_TYPE      ((quint8)0x87)      //发送Game类型
#define TRANSMIT_OTHER_TYPE     ((quint8)0x8f)      //发送Other类型


////////////////////客户/服务端公共数据区///////////////////

//客户端群状态
enum _ClientGroupStatus
{
    GroupStatus_Nothing = 0,        //没加入房间
    GroupStatus_Waiting = 1,        //加入了房间,无操作,用户可手动切换到Readying
    GroupStatus_Readying = 2,       //加入了房间,准备,用户可手动切换到Waiting
    GroupStatus_Playing = 3,        //加入了房间,正在玩,用户在一个线程中被操作
    GroupStatus_ReJoining = 4,      //加入了房间,正在玩,用户在一个线程中被操作
    GroupStatus_ReadyToWatch = 5,   //加入了房间,正在玩,用户在一个线程中被操作
    GroupStatus_Watching = 6,       //加入了房间,正在玩,用户在一个线程中被操作
};


//客户加入群时的状态(只有客户端用这个结构体)
struct _ClientGroupInfo
{
    int     m_ClientGroupStatus;            //_ClientGroupStatus状态!!!
    qint32  m_nGroupId;                     //用户加入的 房间
    QString m_strPassword;
    qint32  m_nGroupIndex;                  //座位号(房间内的唯一ID,0~MaxClient)
    bool    m_bIsGroupMaster;               //是否是房主!!!
    qint32  m_nGroupMaxPlayerCount;         //房间最大人数
    qint32  m_nGroupPlayerCount;            //房间人数
    quint32 m_unFrameIndex;                 //房间进行的帧
    QVariant m_vGroupData;                  //房间额外数据

    /*_ClientGroupInfo()
    {
        _init();
    }

    void _init()
    {
        m_ClientGroupStatus = _ClientGroupStatus::GroupStatus_Nothing;
        m_nGroupId = -1;
        m_nGroupIndex = -1;
        m_bIsGroupMaster = false;
        m_nGroupMaxPlayerCount = 0;
        m_nGroupPlayerCount = 0;

    }*/
};
//////////////////////////////////////////////////////////



//用来加密的密码CodeData
extern QList<QByteArray> g_listTransfersCodeData;


#endif // COMMON_H
